﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using Microsoft.Reporting.WebForms;

namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class UI_Students_Report : System.Web.UI.Page
    {
        string validaSession = "";
        int tag = 0;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                //Response.Cache.SetAllowResponseInBrowserHistory(false);
                //Response.Cache.SetNoStore();

                if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    validaSession = "NoHaIniciadoSession";
                    Response.Redirect("UI_Login.aspx?validaSession=" + validaSession);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                {
                    Response.Redirect("UI_DashboardTeacher.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                {
                    CargarNiveles();
                    ddlNivel.AutoPostBack = true;
                    ddlHorario.AutoPostBack = true;
                    ckbPatronBusqueda.AutoPostBack = true;
                    ddlCarrera.AutoPostBack = true;
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                {
                    Response.Redirect("UI_DashboardStudents.aspx");
                }
            }
        }

        private void CargarNiveles()
        {
            ListadoNiveles oListado = new ListadoNiveles();
            List<Nivel> lista = new List<Nivel>();
            Ciclos oCiclos = new Ciclos();
            oListado.ciclo = oCiclos.GetMaxCiclo();
            lista = oListado.getNiveles();
            if (lista.Count>0)
            {
                lista.Insert(0, new Nivel() { nivel = 0, equivalente = "<seleccione un nivel>" });
                ddlNivel.DataSource = lista;
                ddlNivel.DataTextField = "equivalente";
                ddlNivel.DataValueField = "nivel";
                ddlNivel.DataBind();
                

            }

        }

        protected void btnGenerarReporte_Click(object sender, EventArgs e)
        {
            if (ckbPatronBusqueda.Checked)
            {
                tag = 1;
            }
            else
            {
                tag = 0;
            }
            if (tag==0)
            {
                if (ddlHorario.SelectedIndex == 0 || ddlNivel.SelectedIndex == 0)
                {

                }
                else
                {
                    if (btnGenerarReporte.Text == "Generar Reporte")
                    {
                        cargarDdlHorarios();
                    }
                    else if (btnGenerarReporte.Text == "Exportar a PDF")
                    {
                        PDFMatriculados();
                    }
                }
            }
            else
            {
                if (ddlCarrera.SelectedIndex == 0)
                {

                }
                else
                {
                    if (btnGenerarReporte.Text == "Generar Reporte")
                    {
                        cargarDdlHorarios();
                    }
                    else if (btnGenerarReporte.Text == "Exportar a PDF")
                    {
                        PDFMatriculadosCarrera();
                    }
                }
            }
            

        }
              
        private void cargarDdlHorarios()
        {
            Ciclos oCiclos = new Ciclos();
            int ciclo = oCiclos.GetMaxCiclo();
            Session["c"] = ciclo;
            Usuarios oUsuarios = new Usuarios();
            List<Usuarios> lista = new List<Usuarios>();
            oUsuarios.ciclo = ciclo;
            if (tag==0)
            {
                oUsuarios.nivel = int.Parse(ddlNivel.SelectedValue);
                oUsuarios.idHorario = int.Parse(ddlHorario.SelectedValue);        
            }
            else
            {
                oUsuarios.idCarrera = int.Parse(ddlCarrera.SelectedValue);
            }
            oUsuarios.identificador = tag;
            lista = oUsuarios.ReporteMatriculadosPorNivel();
                gvAlumnosMatriculados.DataSource = lista;
                gvAlumnosMatriculados.DataBind();
                if (gvAlumnosMatriculados.Rows.Count > 0)
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "Dttable", String.Format("CargaDataTable('{0}',{1});", "Contenido_gvAlumnosMatriculados", gvAlumnosMatriculados.Rows[0].Cells.Count), true);

                if (lista.Count>0)
                {
                    btnGenerarReporte.Text = "Exportar a PDF";
                }
        }
        protected void ddlNivel_SelectedIndexChanged1(object sender, EventArgs e)
        {
             if (ddlNivel.SelectedIndex == 0)
                        {
                            CargaHorarios();
                            fila2Matricula.Visible = false;
                            cargarDdlHorarios();
                        }
                        else
                        {
                            CargaHorarios();
                            cargarDdlHorarios();
                        }
        }
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlNivel.SelectedIndex == 0)
            {
                CargaHorarios();
                fila2Matricula.Visible = false;
                cargarDdlHorarios();
            }
            else
            {
                CargaHorarios();
                cargarDdlHorarios();
            }
        }
        private void CargaHorarios()
        {
            Modulos oMo = new Modulos();
            Ciclos oCiclo = new Ciclos();
            ListadoHorarios oListadoH = new ListadoHorarios();
            List<Horarios> lista = new List<Horarios>();
            oListadoH.nivel = int.Parse(ddlNivel.SelectedValue);
            oListadoH.ciclo = oCiclo.GetMaxCiclo();

            lista = oListadoH.GetHorariosReporte();
            
                lista.Insert(0, new Modulos() { idModulo = 0, horario = "<seleccione un horario>" });
                ddlHorario.DataSource = lista;
                ddlHorario.DataTextField = "horario";
                ddlHorario.DataValueField = "idModulo";
                ddlHorario.DataBind();
                fila2Matricula.Visible = false;
               
                if (lista.Count > 0)
                {
                    btnGenerarReporte.Text = "Generar Reporte";
                }
          
        }
        private void PDFMatriculados()
        {

            int ciclo1 = (int)Session["c"];
            EspamIdiomasDataSet.sp_ReporteMatriculadosPorNivelDataTable dt = new EspamIdiomasDataSet.sp_ReporteMatriculadosPorNivelDataTable();
            EspamIdiomasDataSetTableAdapters.sp_ReporteMatriculadosPorNivelTableAdapter da = new EspamIdiomasDataSetTableAdapters.sp_ReporteMatriculadosPorNivelTableAdapter();
            da.Fill(dt, int.Parse(ddlNivel.SelectedValue),ciclo1,int.Parse(ddlHorario.SelectedValue),tag,0);

            List<ReportParameter> parametros = new List<ReportParameter>();
            parametros.Add(new ReportParameter("nivel",ddlNivel.SelectedItem.Text));
            parametros.Add(new ReportParameter("horario",ddlHorario.SelectedItem.Text));
            parametros.Add(new ReportParameter("docente", Session["docente"].ToString()));
            parametros.Add(new ReportParameter("idModulo", Session["codMod"].ToString()));

            ReportViewer viewer = new ReportViewer();
            ReportDataSource RD = new ReportDataSource();
            RD.Value = dt;
            RD.Name = "DataSet1";
            //viewer.LocalReport.ReportPath = Server.MapPath("Reports/Teachers/AlumnosLListado.rdlc");
            viewer.LocalReport.DataSources.Clear();
            viewer.LocalReport.DataSources.Add(RD);
            //viewer.LocalReport.ReportEmbeddedResource = "ListadoEstudiantes.rdlc";
            viewer.LocalReport.ReportPath = Server.MapPath("Reports/Administradores/MatriculadosPorNivel.rdlc");
            viewer.LocalReport.SetParameters(parametros);
            viewer.LocalReport.Refresh();

            string mimeType;
            string encoding;
            string fileNameExtension;
            string[] streams;
            Warning[] warnings;
            byte[] pdfContent = viewer.LocalReport.Render("PDF", string.Empty, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
            string nombre = ddlNivel.SelectedItem.Text+"-"+ddlHorario.SelectedItem.Text;
            this.Response.Clear();
            this.Response.ContentType = "application/pdf";
            this.Response.AddHeader("Content-disposition", "attachment; filename="+nombre+".pdf");
            this.Response.BinaryWrite(pdfContent);
            this.Response.End();
        }

        private void PDFMatriculadosCarrera()
        {

            int ciclo1 = (int)Session["c"];
            EspamIdiomasDataSet.sp_ReporteMatriculadosPorNivelDataTable dt = new EspamIdiomasDataSet.sp_ReporteMatriculadosPorNivelDataTable();
            EspamIdiomasDataSetTableAdapters.sp_ReporteMatriculadosPorNivelTableAdapter da = new EspamIdiomasDataSetTableAdapters.sp_ReporteMatriculadosPorNivelTableAdapter();
            da.Fill(dt, 0, ciclo1, 0, tag, int.Parse(ddlCarrera.SelectedValue));

            List<ReportParameter> parametros = new List<ReportParameter>();
            parametros.Add(new ReportParameter("carrera", ddlCarrera.SelectedItem.Text));
           

            ReportViewer viewer = new ReportViewer();
            ReportDataSource RD = new ReportDataSource();
            RD.Value = dt;
            RD.Name = "DataSet1";
            //viewer.LocalReport.ReportPath = Server.MapPath("Reports/Teachers/AlumnosLListado.rdlc");
            viewer.LocalReport.DataSources.Clear();
            viewer.LocalReport.DataSources.Add(RD);
            //viewer.LocalReport.ReportEmbeddedResource = "ListadoEstudiantes.rdlc";
            viewer.LocalReport.ReportPath = Server.MapPath("Reports/Administradores/MatriculadosPorCarrera.rdlc");
            viewer.LocalReport.SetParameters(parametros);
            viewer.LocalReport.Refresh();

            string mimeType;
            string encoding;
            string fileNameExtension;
            string[] streams;
            Warning[] warnings;
            byte[] pdfContent = viewer.LocalReport.Render("PDF", string.Empty, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
            //string nombre = ddlNivel.SelectedItem.Text + "-" + ddlHorario.SelectedItem.Text;
            this.Response.Clear();
            this.Response.ContentType = "application/pdf";
            this.Response.AddHeader("Content-disposition", "attachment; filename=" + ddlCarrera.SelectedItem.Text + ".pdf");
            this.Response.BinaryWrite(pdfContent);
            this.Response.End();
        }

        public override void VerifyRenderingInServerForm(Control control)
        {
            //required to avoid the run time error "  
            //Control 'GridView1' of type 'Grid View' must be placed inside a form tag with runat=server."  
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("UI_Students_Report.aspx");
        }

        protected void ddlHorario_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlHorario.SelectedIndex == 0)
            {
                fila2Matricula.Visible = false;
                cargarDdlHorarios();

            }
            else
            {
                btnGenerarReporte.Text = "Generar Reporte";
                fila2Matricula.Visible = true;
                cargarDdlHorarios();
                tag = 0;
                Usuarios oUsu = new Usuarios();
                List<string> lista = new List<string>();
                oUsu.nivel = int.Parse(ddlNivel.SelectedValue);
                oUsu.idModulo = int.Parse(ddlHorario.SelectedValue);
                lista = oUsu.GetDocenteAndModulo();
                Session["docente"] = lista[0];
                Session["codMod"] = lista[1];
            }
        }

        protected void gvAlumnosMatriculados_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int index = e.RowIndex;
            int id = (int)gvAlumnosMatriculados.DataKeys[index].Value;
            HfDeleteID.Value = id.ToString();
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);     

            
        }

        protected void gvAlumnosMatriculados_Load(object sender, EventArgs e)
        {
            if (gvAlumnosMatriculados.Rows.Count > 0)
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Dttable", String.Format("CargaDataTable('{0}',{1});", "Contenido_gvAlumnosMatriculados", gvAlumnosMatriculados.Rows[0].Cells.Count), true);
        }

        protected void gvAlumnosMatriculados_PreRender(object sender, EventArgs e)
        {
            GridView gvAlumnosMatriculados = (sender) as GridView;
            if (gvAlumnosMatriculados.Rows.Count > 0)
            {
                //This replaces <td> with <th> and adds the scope attribute
                gvAlumnosMatriculados.UseAccessibleHeader = true;

                //This will add the <thead> and <tbody> elements
                gvAlumnosMatriculados.HeaderRow.TableSection = TableRowSection.TableHeader;

                //This adds the <tfoot> element. 
                //Remove if you don't have a footer row
                gvAlumnosMatriculados.FooterRow.TableSection = TableRowSection.TableFooter;
            }
        }

        protected void ckbPatronBusqueda_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbPatronBusqueda.Checked)
            {
             
            ddlHorario.Visible = false;
            ddlCarrera.Visible = true;
            lblHorario.Text = "Carrera:";
            ListadoCarreras oCarreras = new ListadoCarreras();
            List<Carreras> lista = new List<Carreras>();
            lista = oCarreras.GetCarreras();
            lista.Insert(0,new Carreras() { idCarreras=0, carrera="<seleccione>" });
            ddlCarrera.DataSource = lista;
            ddlCarrera.DataTextField = "carrera";
            ddlCarrera.DataValueField = "idCarreras";
            ddlCarrera.DataBind();
            lblNivel.Text = "Ciclo";
            Ciclos oc=new Ciclos();
            lblCiclo.Text = oc.GetMaxCiclo().ToString();
            lblCiclo.Visible = true;
            ddlNivel.Visible = false;
            }
            else
            {

                ddlHorario.Visible = true;
                ddlCarrera.Visible = false;
                lblHorario.Text = "Horario:";
                lblNivel.Text = "Nivel:";
                lblCiclo.Visible = false;
                ddlNivel.Visible = true;
            }
        }
       
        protected void ddlCarrera_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlCarrera.SelectedIndex == 0)
            {
                fila2Matricula.Visible = false;
                cargarDdlHorarios();

            }
            else
            {
                tag = 1;
                btnGenerarReporte.Text = "Exportar a PDF";
                fila2Matricula.Visible = true;
                cargarDdlHorarios();
            }
        }

        protected void btnDelete_Click(object sender, EventArgs e)
        {
            Usuarios oUsuarios = new Usuarios();
            Ciclos oci = new Ciclos();
            string mensaje = "";  
            try
            {
                if (ckbPatronBusqueda.Checked)
                {
                    tag = 1;
                }
                else
                {
                    tag = 0;
                }
                oUsuarios.idAlumno = int.Parse(HfDeleteID.Value);
                oUsuarios.ciclo = oci.GetMaxCiclo();
                mensaje = oUsuarios.AlumnoRetirado();
                if (mensaje == "RETIRADOCORRECTAMENTE")
                {
                    cargarDdlHorarios();
                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeBien('ALUMNO DESVINCULADO CORRECTAMENTE')", true);
                }
                else
                {
                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ERROR VERIFIQUE DATOS')", true);
                }
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append(@"<script type='text/javascript'>");
                //sb.Append("alert('Realizado Correctamente');");
                sb.Append("$('#flexModal').modal('hide');");
                sb.Append(@"</script>");
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "delHideModalScript", sb.ToString(), false);
            }
            catch (Exception)
            {

                throw;
            }
        }

       
    }
}